﻿Public Class Doi3
    'state : 0 mặc định - trạng thái 1- tạo mới 2 sửa 3 - xóa
    Private state As Integer 'xử lý trạng thái để biết khi nào thì ở trạng thái nào 
    'load form
    Dim isLoad As Boolean = True 'xử lý khi load form (để coi form đã đc load hay chư
    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
        If keyData = (Keys.Control Or Keys.N) Then
            Return getTaoMoi()
        End If
        If keyData = (Keys.Control Or Keys.S) Then
            Return getLuu()
        End If
        If keyData = (Keys.Control Or Keys.E) Then
            Return getSua()
        End If
        If keyData = (Keys.Control Or Keys.D) Then
            Return getXoa()
        End If
        If keyData = (Keys.Control Or Keys.P) Then
            'Return Me.getIn()
        End If
        If keyData = (Keys.Control Or Keys.R) Then
            Return Me.getLamTuoi
        End If
        If (keyData = (Keys.Control Or Keys.Q)) Then
            Return getThoat()
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
    Private Sub setReadonly(ByVal isTrue As Boolean) 'set readonly toàn bộ các iultragrid 
        Me.ChaIUltraGridThongTin.setReadonly(isTrue)
        Me.ConIUltraGrid.setReadonly(isTrue)
    End Sub
    'load dữ liệu lên 
    Private Sub loadDuLieu()
        If isLoad Then
            Me.ChaTableAdapter.Fill(Me.ErpharmaDataSet.cha)
            Me.ConTableAdapter.Fill(Me.ErpharmaDataSet.con)

            isLoad = False ' trả về để đảm bảo load 1 lần dữ liệu (vì lần sau isload = false rồi thì ko load nữa)
        End If
    End Sub
    Private Sub loadCauHinh() 'set các cấu hình khác của iultragrid như mặc định , bắt lỗi , .... nếu có 
        'set giao diện
        Me.ChaIUltraGridThongTin.setGiaoDien_Doi_ThongTin()
        Me.ChaIUltraGridDanhSach.setGiaoDienTuyBien()
        Me.ConIUltraGrid.setGiaoDienVua()
        Me.IUltraGrid_TimKiem.setGiaoDienVua()
        'set group by mã để xử lý khi tìm kiếm chi tiết
        Me.IUltraGrid_TimKiem.setGroupBy("ma")
        'cho phép tìm kiếm cột trên ultragrid tìm kiếm chi tiết
        Me.IUltraGrid_TimKiem.setTimKiemTrenCotUltraGrid()
        Me.ChaIUltraGridDanhSach.setTimKiemTrenCotUltraGrid()
        ChaIUltraGridThongTin.setFocusIUltraGrid("ngay", Me.ConIUltraGrid) 'set focus lên iultragrid chi tiết là ConIUltraGrid
        Me.ChaIUltraGridThongTin.setDoiTuongXuLyDuLieu(Me.ErpharmaDataSet.cha, Me.ChaBindingSource, Me.ChaTableAdapter, Me.ErpharmaDataSet)
        Me.ConIUltraGrid.setDoiTuongXuLyDuLieu(Me.ErpharmaDataSet.con, Me.ConBindingSource, Me.ConTableAdapter, Me.ErpharmaDataSet)
        Me.ConIUltraGrid.setChoPhepMenuStrip(True, True, True, False, True, False, False, False) 'xem hàm menustrip mới 
        Me.ChaIUltraGridThongTin.setMoveLast() 'di chuyển tới record cuối cùng 
        Me.setReadonly(True) ' set readonly = true tất cả các iultrarid khi load lên 
    End Sub
    Private Sub NhomNguoiDung_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'loadDuLieu()
        'loadCauHinh()
        'trạng thái mặc định ban đầu là 0
        Me.Timer1.Start()
    End Sub
    Private Function getTaoMoi() As Boolean
        If Me.ChaIUltraGridThongTin.getTaoMoi() Then 'nếu tạo mới thành công thì mới có trạng thái là 1 
            Me.setReadonly(False)
            Me.state = 1
            Return True
        Else
            Return False
        End If
    End Function
    Private Sub btnTaoMoi_Click(sender As System.Object, e As System.EventArgs) Handles btnTaoMoi.Click
        getTaoMoi()
    End Sub
    Private Function getLuu() As Boolean
        'lưu phần cha và con 
        'mục đích để xuất hiện messagebox 'có lưu không ' 1 lần 
        If Me.ChaIUltraGridThongTin.getCoThayDoiDuLieuKhong Then 'nếu cha có thay đổi dữ liệu
            If ChaIUltraGridThongTin.getLuu Then 'lưu cha
                Me.ConIUltraGrid.getLuuNgam() 'lưu ngầm con
                Me.state = 0 'trả về trạng thái form mặc định
                Me.setReadonly(True) 'set readonly cho toàn form 
                Return True
                Exit Function
            End If
        ElseIf ConIUltraGrid.getCoThayDoiDuLieuKhong Then 'trường hợp con thay đổi dữ liệu
            If ConIUltraGrid.getLuu Then
                Me.state = 0 'trả về trạng thái form mặc định
                Me.setReadonly(True) 'set readonly cho toàn form 
                Return True
                Exit Function
            End If
        End If
        Return False 'không có thay đổi dữ liệu
    End Function
    Private Sub btnLuu_Click(sender As System.Object, e As System.EventArgs) Handles btnLuu.Click
        getLuu()
    End Sub
    Private Function getXoa() As Boolean
        If Me.ChaIUltraGridThongTin.getXoa() Then
            Me.state = 0
            Return True
        Else
            Return False
        End If
    End Function
    Private Sub btnXoa_Click(sender As System.Object, e As System.EventArgs) Handles btnXoa.Click
        getXoa()
    End Sub
    Private Function getLamTuoi() As Boolean
        Try
            Dim position As Integer = Me.ChaBindingSource.Position 'lấy vị trí của cha hiện tại để sau khi load dữ liệu lại gán cho đúng vị trí 
            Me.isLoad = True 'gán lại bằng true để load lại dữ liệu
            Me.loadDuLieu()
            Me.ChaBindingSource.Position = position 'gán lại vị trí hiện tại
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
    Private Sub btnLamTuoi_Click(sender As System.Object, e As System.EventArgs) Handles btnLamTuoi.Click
        getLamTuoi()
    End Sub

    Private Sub btnIn_Click(sender As System.Object, e As System.EventArgs) Handles btnIn.Click

    End Sub
    Private Function getThoat() As Boolean
        If Me.getLuu() Then
            Me.Dispose()
            Me.Close()
            Return True
        Else
            Me.Dispose()
            Me.Close()
            Return True
        End If
    End Function
    Private Sub btnThoat_Click(sender As System.Object, e As System.EventArgs) Handles btnThoat.Click
        getThoat()
    End Sub

    Private Function getSua() As Boolean
        Try
            Me.setReadonly(False)
            Me.state = 2
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function
    Private Sub btnSua_Click(sender As System.Object, e As System.EventArgs) Handles btnSua.Click
        getSua()
    End Sub
    'chạy progressbar phụ thuộc vào đồng hồ
    Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick
        Me.ultraProgressBar1.IncrementValue(10)
        If ultraProgressBar1.Value = ultraProgressBar1.Maximum / 2 Then
            loadDuLieu()
        End If
        If ultraProgressBar1.Value = ultraProgressBar1.Maximum Then
            loadCauHinh()
            Me.state = 0
            Me.Timer1.Stop()
            Me.ultraProgressBar1.Hide()
        End If
    End Sub
    'xử lý click vào phần tìm kiếm chi tiết để quay trở lại các phiếu cha
    Private Sub IUltraGrid_TimKiem_ClickCell(sender As Object, e As Infragistics.Win.UltraWinGrid.ClickCellEventArgs) Handles IUltraGrid_TimKiem.ClickCell
        If IUltraGrid_TimKiem.ActiveRow.Index <> -1 Then ' tránh trường hợp click vô row tìm kiếm (rowfilter
            Try
                Me.ChaBindingSource.Position = Me.ChaBindingSource.Find("ma", Me.IUltraGrid_TimKiem.ActiveRow.Cells("ma").Value)
            Catch ex As Exception
            End Try
        End If
    End Sub

End Class